উদাহরণ সহ Authentication এবং Authorization বাস্তবায়ন

Java Technologies - স্প্রিং সিকিউরিটি (Spring Security) - Spring Security এর Authentication এবং Authorization
183

Spring Security ব্যবহার করে Authentication এবং Authorization বাস্তবায়ন করার একটি সাধারণ উদাহরণ নিম্নে দেয়া হলো।


Authentication এবং Authorization বাস্তবায়নের ধাপসমূহ

1. প্রয়োজনীয় ডিপেন্ডেন্সি যোগ করা

Spring Boot ব্যবহার করলে spring-boot-starter-security ডিপেন্ডেন্সি যোগ করুন।

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2. SecurityConfig ক্লাস তৈরি করা

@Configuration এবং @EnableWebSecurity এনোটেশন ব্যবহার করে একটি কনফিগারেশন ক্লাস তৈরি করুন, যেখানে Authentication এবং Authorization এর নিয়মাবলী সংজ্ঞায়িত করা হবে।

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/admin/**").hasRole("ADMIN") // শুধুমাত্র ADMIN রোলের জন্য
            .antMatchers("/user/**").hasRole("USER") // শুধুমাত্র USER রোলের জন্য
            .antMatchers("/public/**").permitAll() // পাবলিক API সবার জন্য উন্মুক্ত
            .anyRequest().authenticated() // অন্য যেকোনো অনুরোধ প্রমাণীকরণ প্রয়োজন
            .and()
            .formLogin() // ফর্ম ভিত্তিক লগইন সক্রিয়
            .and()
            .httpBasic(); // HTTP Basic Authentication সক্রিয়
        return http.build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

3. In-Memory Authentication সেটআপ

In-Memory Authentication ব্যবহার করে একটি সহজ ডেমো বাস্তবায়ন করা যায়।

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
public class UserConfig {

    @Bean
    public UserDetailsService userDetailsService(PasswordEncoder passwordEncoder) {
        UserDetails admin = User.builder()
            .username("admin")
            .password(passwordEncoder.encode("admin123"))
            .roles("ADMIN")
            .build();

        UserDetails user = User.builder()
            .username("user")
            .password(passwordEncoder.encode("user123"))
            .roles("USER")
            .build();

        return new InMemoryUserDetailsManager(admin, user);
    }
}

4. Controller তৈরি

এখন কিছু এন্ডপয়েন্ট তৈরি করা যাক, যেখানে বিভিন্ন রোল অনুযায়ী Authorization প্রয়োগ করা হবে।

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/")
public class AppController {

    @GetMapping("/public")
    public String publicEndpoint() {
        return "This is a public endpoint. Everyone can access!";
    }

    @GetMapping("/user")
    public String userEndpoint() {
        return "This endpoint is for USERS only!";
    }

    @GetMapping("/admin")
    public String adminEndpoint() {
        return "This endpoint is for ADMINS only!";
    }
}

উদাহরণের কাজের প্রক্রিয়া

  1. Public Endpoint:
    • /public এন্ডপয়েন্টে অ্যাক্সেস করতে Authentication প্রয়োজন নেই। এটি সবাই দেখতে পারে।
  2. User Endpoint:
    • /user এন্ডপয়েন্টে শুধু USER রোলের ইউজাররা অ্যাক্সেস করতে পারবে।
  3. Admin Endpoint:
    • /admin এন্ডপয়েন্টে শুধু ADMIN রোলের ইউজাররা অ্যাক্সেস করতে পারবে।

HTTP Basic Authentication দিয়ে পরীক্ষা করা

Spring Security এর HTTP Basic Authentication ব্যবহার করলে, নিচের মতো লগইন পপ-আপ আসবে যেখানে আপনি ইউজারনেম এবং পাসওয়ার্ড দিয়ে লগইন করতে পারবেন।

টেস্ট:

  1. URL: http://localhost:8080/public
    Response: "This is a public endpoint. Everyone can access!"
  2. URL: http://localhost:8080/user
    • Username: user
    • Password: user123
      Response: "This endpoint is for USERS only!"
  3. URL: http://localhost:8080/admin
    • Username: admin
    • Password: admin123
      Response: "This endpoint is for ADMINS only!"

Database-Based Authentication

1. ডাটাবেস স্কিমা তৈরি:

users এবং authorities টেবিল তৈরি করুন।

CREATE TABLE users (
    username VARCHAR(50) PRIMARY KEY,
    password VARCHAR(100) NOT NULL,
    enabled BOOLEAN NOT NULL
);

CREATE TABLE authorities (
    username VARCHAR(50) NOT NULL,
    authority VARCHAR(50) NOT NULL,
    FOREIGN KEY (username) REFERENCES users(username)
);

2. ডেটা যোগ করুন:

INSERT INTO users (username, password, enabled) VALUES ('admin', '$2a$10$abcdefghijklmopqrstuvwxyz', true);
INSERT INTO authorities (username, authority) VALUES ('admin', 'ROLE_ADMIN');

3. Spring Security JDBC Configuration:

@Bean
public UserDetailsService userDetailsService(DataSource dataSource) {
    JdbcUserDetailsManager userDetailsManager = new JdbcUserDetailsManager(dataSource);
    userDetailsManager.setUsersByUsernameQuery("SELECT username, password, enabled FROM users WHERE username = ?");
    userDetailsManager.setAuthoritiesByUsernameQuery("SELECT username, authority FROM authorities WHERE username = ?");
    return userDetailsManager;
}

উপসংহার:

  • Authentication: ব্যবহারকারীর পরিচয় যাচাই (ইউজারনেম ও পাসওয়ার্ড ভিত্তিক)।
  • Authorization: যাচাই করা ব্যবহারকারী কোন রিসোর্স অ্যাক্সেস করতে পারে তা নির্ধারণ করা।

উপরের উদাহরণগুলো ব্যবহার করে আপনি Spring Security দিয়ে সহজেই Authentication এবং Authorization বাস্তবায়ন করতে পারবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...